package gest;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.sql.Connection;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Scanner;

public class Estat_Farm {
	static Registry re;
	static Gestao g;
	static Scanner sca = new Scanner(System.in);
	static Connection conn;
	static int li;
	static Farmacia f;

	public Estat_Farm() {
		String qu = "select Farmacias.nome from Receitas, Farmacias"
				+ " where Receitas.idfarm=Farmacias.idfarm"
				+ " group by Receitas.idfarm"
				+ " order by count(Receitas.idfarm) desc limit 3";
		// System.out.println(qu);
		java.sql.ResultSet rs = querry(qu);
		System.out.println("As farmacias que passam mais receitas sao:\n");
		try {
			rs.first();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}
	
	public Estat_Farm(int licenca){
		li = licenca;
		String qu = null;
		qu = "select Medicamentos.nome from Medicamentos, Farmacias, Receitas "
				+ "where Receitas.idfarm=Farmacias.idfarm and"
				+ " Receitas.idMedi=Medicamentos.idMedi and Farmacias.licenca="
				+ li + " group by Receitas.idmedi "
				+ " order by count(Receitas.idmedi) desc limit 3";
		// System.out.println(qu);
		java.sql.ResultSet rs = querry(qu);
		System.out.println("Os medicamentos mais vendidos sao:\n");
		try {
			rs.first();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		if (args[0].equals("-i")) {
			try {
				re = LocateRegistry.getRegistry();
				g = (Gestao) re.lookup("GestaoReceitas");
			} catch (RemoteException e) {
				e.printStackTrace();
			} catch (NotBoundException e) {
				e.printStackTrace();
			}
			g = new Gestao_Impl();
			selecciona();
		} else if (args[0].equals("-mr")) {
			new Estat_Farm();
		} else if (args[0].equals("-mm")){
			new Estat_Farm(Integer.parseInt(args[1]));
		} else System.out.println("Opcao invalida");
	}

	public static void selecciona() {
		System.out.println("Escolha o tipo de procura pretendido:\n"
				+ "1- Quais as farmacias que despacham mais receitas\n"
				+ "2- Medicamentos mais vendidos de cada farmacia\n"
				+ "3- Sair\n");
		int x = Integer.parseInt(sca.nextLine());
		switch (x) {
		case 1:
			mais_receitas();
			break;
		case 2:
			mais_medi();
			break;
		case 3:
			System.exit(0);
			break;
		default:
			System.out.println("Opccao invalida!!!");
			selecciona();
			break;
		}

	}

	public static java.sql.ResultSet querry(String q) {
		if (conn == null)
			conn = DBConnection.get_conn();
		java.sql.Statement st;
		java.sql.ResultSet rs = null;
		try {
			st = conn.createStatement();
			rs = st.executeQuery(q);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}

	public static void mais_receitas() {
		String qu = "select Farmacias.nome from Receitas, Farmacias"
				+ " where Receitas.idfarm=Farmacias.idfarm"
				+ " group by Receitas.idfarm"
				+ " order by count(Receitas.idfarm) desc limit 3";
		// System.out.println(qu);
		java.sql.ResultSet rs = querry(qu);
		System.out.println("As farmacias que passam mais receitas sao:\n");
		try {
			rs.first();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
				+ "2-Nao\n");
		int res = Integer.parseInt(sca.nextLine());
		switch (res) {
		case 1:
			selecciona();
			break;
		case 2:
			System.exit(0);
			break;
		}
	}

	public static void mais_medi() {
		System.out.println("Insira a licenca da farmacia pretendia");
		li = Integer.parseInt(sca.nextLine());
		try {
			f = g.cria_farmacia(li);
			System.out.println("O nome do farmacia e'" + f.get_nome());
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		String qu = null;
		qu = "select Medicamentos.nome from Medicamentos, Farmacias, Receitas "
				+ "where Receitas.idfarm=Farmacias.idfarm and"
				+ " Receitas.idMedi=Medicamentos.idMedi and Farmacias.licenca="
				+ li + " group by Receitas.idmedi "
				+ " order by count(Receitas.idmedi) desc limit 3";
		// System.out.println(qu);
		java.sql.ResultSet rs = querry(qu);
		System.out.println("Os medicamentos mais vendidos sao:\n");
		try {
			rs.first();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
				+ "2-Nao\n");
		int res = Integer.parseInt(sca.nextLine());
		switch (res) {
		case 1:
			selecciona();
			break;
		case 2:
			System.exit(0);
			break;
		}
	}
}
